package com.example.orderservice.controller;



import com.example.orderservice.domain.dto.OrderPayDTO;
import com.example.orderservice.domain.entity.Order;
import com.example.orderservice.domain.entity.item;
import com.example.orderservice.service.IOrderService;
import com.example.orderservice.utils.CurrentHoler;
import com.example.orderservice.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;



/**
 * 订单控制器
 * 处理订单相关的增删改查及支付、取消等业务操作
 *
 * @author czwa
 */
@RestController
@RequestMapping("/order")
public class orderController {

    @Autowired
    private IOrderService orderService;

    /**
     * 添加订单
     * 校验订单金额有效性后调用服务层创建订单
     *
     * @param order 订单实体对象
     * @return 订单ID及操作结果
     */
    @PostMapping
    public Result addOrder(@RequestBody Order order) {
        item[] items = order.getItems();
        double sum = 0;

        // 计算订单总金额
        for (item i : items) {
            sum += i.getPrice() * i.getQuantity();
        }

        // 校验订单金额有效性（示例业务规则）
        if (sum <= (order.getExpend() - 1)) {
            return Result.error("订单金额异常，无法创建");
        }

        return Result.success(orderService.addOrder(order));
    }

    /**
     * 获取所有订单
     *
     * @return 订单列表
     */
    @GetMapping("/all")
    public Result getAllOrder() {
        List<Order> list = orderService.getAllOrder();
        return Result.success(list);
    }

    /**
     * 获取未支付订单
     *
     * @return 未支付订单列表
     */
    @GetMapping("/noPaid")
    public Result getNoPaidOrder() {
        List<Order> list = orderService.getNoPaidOrder();
        return Result.success(list);
    }

    /**
     * 获取已处理订单
     *
     * @return 已处理订单列表
     */
    @GetMapping("/processed")
    public Result getProcessedOrder() {
        List<Order> list = orderService.getProcessedOrder();
        return Result.success(list);
    }

    /**
     * 获取已取消订单
     *
     * @return 已取消订单列表
     */
    @GetMapping("/canceled")
    public Result getCanceledOrder() {
        List<Order> list = orderService.getCanceledOrder();
        return Result.success(list);
    }

    /**
     * 订单支付
     * 注入当前用户ID后调用服务层处理支付逻辑
     *
     * @param order 订单支付DTO
     * @return 操作结果
     */
    @PutMapping("/pay")
    public Result payOrder(@RequestBody OrderPayDTO order) {
        order.setUserId(CurrentHoler.getCurrentId());
        orderService.payOrder(order);
        return Result.success();
    }

    /**
     * 取消支付
     *
     * @param id 订单ID
     * @return 操作结果
     */
    @PutMapping("/cancelPay")
    public Result cancelPay(@RequestParam int id) {
        orderService.cancelPay(id);
        return Result.success();
    }
}
